695 岛屿的最大面积
// 给你一个大小为 m x n 的二进制矩阵 grid 。
// 岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在 水平或者竖直的四个方向上 相邻。你可以假设 grid 的四个边缘都被 0(代表水)包围着。
// 岛屿的面积是岛上值为 1 的单元格的数目。
// 计算并返回 grid 中最大的岛屿面积。如果没有岛屿,则返回面积为 0 。
// 示例 1:
// 输入:grid = [[0,0,1,0,0,0,0,1,0,0,0,0,0],[0,0,0,0,0,0,0,1,1,1,0,0,0],[0,1,1,0,1,0,0,0,0,0,0,0,0],[0,1,0,0,1,1,0,0,1,0,1,0,0],[0,1,0,0,1,1,0,0,1,1,1,0,0],[0,0,0,0,0,0,0,0,0,0,1,0,0],[0,0,0,0,0,0,0,1,1,1,0,0,0],[0,0,0,0,0,0,0,1,1,0,0,0,0]] // 输出:6 // 解释:答案不应该是 11 ,因为岛屿只能包含水平或垂直这四个方向上的 1 。 // 示例 2:
// 输入:grid = [[0,0,0,0,0,0,0,0]] // 输出:0
js
const maxAreaOfIsland = function (grid) {
if (!grid || grid.length === 0 || grid[0].length === 0) return 0;
let count = 0;
let row = grid.length;
let column = grid[0].length;
for (let i = 0; i < row; i++) {
for (let j = 0; j < column; j++) {
if (grid[i][j] === 1) {
count = Math.max(count, dfs(grid, i, j));
}
}
}
return count;
function dfs(grid, i, j) {
// 如果试图探索的范围已经越界,则return
if (i < 0 || i >= grid.length || j < 0 || j >= grid[0].length || grid[i][j] === 0) return 0;
// 遍历过的坑位都置0,防止反复遍历
grid[i][j] = 0;
// 遍历完当前的1,继续上下左右寻找下一个1,面积+1
return 1 + dfs(grid, i + 1, j) + dfs(grid, i - 1, j) + dfs(grid, i, j + 1) + dfs(grid, i, j - 1);
}
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26